# -*- coding: utf-8 -*-
'''
3.25：中心为-8的拉普拉斯结果比中心为-4的模板得到的结果要清晰的些，说明原因。

    1.中心为-8的拉普拉斯结果比中心为-4的模板得到的结果要清晰的些,主要是对角线上的
方向产生了额外的变化，中心为-4的模板是以以90度增量旋转的拉普拉斯算子，而中心为-8
的模板是以45度增量旋转的拉普拉斯算子。
3.26：(a)若使用一个类似拉普拉斯的较大模板，如中心系数为-24的5*5模板，问是否
可以得到更加清晰的结果？解释下:
    
   中心为-24的5X5模板的锐化结果明显比中心值为-4的3X3模板的结果模糊，原因是模板大小的不同，
另一个是模板的变化的幅度不一样,各向差分影响，所以锐化出的特征也就不一样.
    
(b)当该模板的大小和图像的大小相等时，会发生什么情况？
模糊


'''

from skimage import io
from matplotlib import pyplot as plt
import numpy as np

#图像空间滤波函数
def correl2d(img,window):
    m=window.shape[0]#窗口行度
    n=window.shape[1]#窗口列长度
    #在原始图像的维度上行和列个增加两行
    img1=np.zeros((img.shape[0]+m-1,img.shape[1]+n-1))
    #将img1图像边缘四周用0灰度值填充
    img1[(m-1)//2:(img.shape[0]+(m-1)//2),(n-1)//2:(img.shape[1]+(n-1)//2)]=img
    img2=np.zeros(img.shape)
    for i in range(img2.shape[0]):
        for j in range(img2.shape[1]):
            temp=img1[i:i+m,j:j+n]
            #两矩阵相乘
            img2[i,j]=np.sum(np.multiply(temp,window))
    return img2

def main(image_laplace):
    image_laplace=correl2d(image,window)
    #归一化处理
    image_laplace=(image_laplace-image_laplace.min())/(image_laplace.max()-image_laplace.min())
    image_laplace_enchance=image-image_laplace
    return image_laplace_enchance

#导入图片
image=io.imread('moon.jpg',as_gray=True)
window=np.array([[-1,-1,-1],[-1,8,-1],[-1,-1,-1]])
window1=np.array([[0,1,0],[1,-4,1],[0,1,0]])
img_laplace8=main(correl2d(image,window))
img_laplace4=main(correl2d(image,window1))

#（2）
window24=np.array([[0,0,2,0,0],[0,4,0,4,0],
                   [2,0,-24,0,2],[0,4,0,4,0],
                   [0,0,2,0,0]])
img_laplace24=main(correl2d(image,window24))
#plt.imshow(img_laplace24)






